const https = require('https');
const SQLHelper = require('./SQLHelper')
const {formatTime} = require('./util')
///雪花算法生成id
const snowflake = require('./snowflake')

module.exports = function(app){
///登录拦截中间件
function loginRouter(req,res,next){
    let token = req.headers.token
    if(token){
        SQLHelper(`select * from session where id = ${token}`).then(ret => {
            if(ret.length){
                let session = ret[0]
                req.session = {
                    userId:session.userId,
                    userName:session.userName
                }
                next()
            }else{
                res.status(406).send({errorMsg:'当前用户未登录'})
            }
        })
    }else{
        res.status(405).send({errorMsg:'缺少token，请先进行登录'})
    }
}
///让初登陆以为的所有小程序接口都先验证登陆
app.use('/wx',loginRouter)

///微信登录
app.get('/wxlogin', (req, res,next) => {
    console.log(req.headers)
    let code = req.query.code
    let appid = 'wx22285a94fb497b0b'
    let secret = 'b6d248347fbf2f745ca1305fb4be5e29'
    https.get(`https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secret}&js_code=${code}&grant_type=authorization_code`, (ret) => {
        ret.on('data', (ret) => {
            ret = JSON.parse(ret.toString())
            let openid = ret.openid
            if(!openid){
                res.send({errorMsg: ret.errMsg || '获取openid错误'})
            }else{
                ///查询用户是否已经注册
                let queryMember = `select * from member where openId = '${openid}'`
                SQLHelper(queryMember).then(membersRet => {
                    if(membersRet.length){///用户已经存在
                        ///挂载到req
                        req.member = membersRet[0]
                        next()
                    }else{///用户不存在,使用openid注册用户
                        SQLHelper(`INSERT INTO member(openId) VALUES('${openid}')`).then(newMember => {
                            ///注册成功返回新用户信息
                            SQLHelper(queryMember).then(newMember => {
                                ///挂载到req
                                req.member = membersRet[0]
                                next()
                            })
                        })
                    }
                })
            }
        });

    }).on('error', (e) => {
        console.error(e)
        res.send({errorMsg:'获取openid错误'})
    });
},(req,res) => {
    let member = req.member
    let token = snowflake()
    ///缓存token到session表
    SQLHelper(`
    INSERT INTO session(id,userId,userName,inTime,platform) 
    VALUES(${token},'${member._id}','${member.nickName}','${formatTime(new Date())}','wx')
    `).then(ret => {
        res.send({
            nickName:member.nickName,
            token,
            openId:member.openId,
            avatarUrl:member.avatarUrl,
            _id:member._id
        })
    })
})

///修改用户信息
app.put('/wx/member',(req,res) => {
    ///
    let userInfo = req.body
    console.log(userInfo,req.query)
    SQLHelper(`
    update member 
    set nickName = '${userInfo.nickName}',avatarUrl = '${userInfo.avatarUrl}'
    where _id = ${req.session.userId}
    `).then(ret => {
        console.log(ret)
        res.send({})
    })
})

///获取收获地址列表
///memberId 用户ID 必填
app.get('/wx/address',(req,res) => {
    if(req.session.userId){
        SQLHelper(`
        select * from address where state = 1 and memberId = ${req.session.userId}
        `).then(ret => {
            res.send(ret)
        })
    }else{
        res.send({errorMsg:'请传入memberId'})
    }
})

///获取收获详情
///addressId 地址_id 必填
app.get('/wx/address/detail',(req,res) => {
    if(req.query.addressId){
        SQLHelper(`
        select * from address where _id = ${req.query.addressId}
        `).then(ret => {
            res.send(ret.length ? ret[0] : {errorMsg:'未获取到地址详情'})
        })
    }else{
        res.send({errorMsg:'请传入addressId'})
    }
})

///新增收货地址
///memberId 用户ID 必填
///receiver 收货人 必填
///phone 手机号 必填
///city 省市区 必填
///area 详细地址 非必填
app.post('/wx/address',(req,res) => {
    if(req.body.receiver &&  req.body.phone && req.body.city){
        SQLHelper(`
        INSERT INTO address(state,memberId,receiver,phone,city,area) 
        VALUES(1,'${req.session.userId}','${req.body.receiver}','${req.body.phone}','${req.body.city}','${req.body.area || ''}')
        `).then(ret => {
            res.send(ret)
        })
    }else{
        res.send({errorMsg:'传入参数错误'})
    }
})

///修改收货地址
///addressId 地址_id 必填
///receiver 收货人 非必填
///phone 手机号 非必填
///city 省市区 非必填
///area 详细地址 非必填
app.put('/wx/address',(req,res) => {
    if(req.body.addressId){
        ///需要修改的项
        let updateKey = ['receiver','phone','city','area']
        let updateValues = []
        for(let i = 0; i < updateKey.length; i ++){
            let key = updateKey[i],value = req.body[key]
            if(value) updateValues.push(`${key}='${value}'`)///判断哪些项需要修改
        }
        SQLHelper(`UPDATE address set ${updateValues.join(',')} WHERE _id = ${req.body.addressId}`).then(ret => {
            res.send(ret)
        })
    }else{
        res.send({errorMsg:'传入参数错误'})
    }
})

///修改为默认地址
///addressId 主码_id 必填
///memberId 用户_id 必填
///isDefault 是否默认 非必填
app.put('/wx/address/default',(req,res) => {
    let addressId = req.body.addressId,memberId = req.session.userId,isDefault = req.body.isDefault == 1 ? 1 : 0
    if(addressId && memberId){
        if(isDefault == 1){///设置默认地址
            ///取消其他默认地址
            SQLHelper(`
            UPDATE address 
            set isDefault = 0 
            WHERE isDefault = 1 AND memberId = ${memberId}
            `).then(ret => {
                SQLHelper(`
                UPDATE address 
                set isDefault = 1 
                WHERE _id = ${addressId}
                `).then(ret => {
                    res.send(ret)
                })
            })
        }else{///取消默认地址
            SQLHelper(`
            UPDATE address 
            set isDefault = 0 
            WHERE _id = ${addressId}
            `).then(ret => {
                res.send(ret)
            })
        }
    }else{
        res.send({errorMsg:'传入参数错误'})
    }
})


///删除地址 逻辑删除
///addressId 主码_id 必填
app.delete('/wx/address',(req,res) => {
    let addressId = req.body.addressId
    if(addressId){
        SQLHelper(`
        UPDATE address 
        set state = 0 
        WHERE _id = ${addressId}
        `).then(ret => {
            res.send(ret)
        })
    }else{
        res.send({errorMsg:'传入参数错误'})
    }
})


}
